const express = require('express');
const path = require('path');
const bodyParser = require('body-parser'); //post参数解析 使用第三方模块 body-parser
const session = require('express-session');
const app = express(); //创建服务器

//应用会话技术
app.use(session({
    secret: 'this is session', //服务器端生成 session 签名
    name: 'dzyp', //修改session 对应 cookie 的名称
    resave: false, //强制保存 session 即使它并没有变化
    saveUninitialized: true, //强制将未初始化的 session 保存
    cookie: {
        maxAge: 1000 * 60 * 60,
        secure: false, //true 表示只有 https协议才能访问 cookit
    },
    rolling: false // true 表示每次请求时强行设置 cookit,这将重置 cookit 过期时间 （默认 false）
}));


//配置body-parser 模块

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false })); // extended: false  就是使用 系统模块 querystring 解析

//静态资源访问 （推荐绝对路径）
app.use(express.static(path.join(__dirname, 'public')))


//配置模板引擎  参数一：模板后缀是什么 
app.engine('.art', require('express-art-template'));
//设置模板根路径 参数一：固定写法views  参数二: 模板路径（推荐绝对路径）
app.set('views', path.join(__dirname, "views"));
// 配置默认渲染引擎 参数一：固定写法  参数二：默认后缀
app.set('view engine', 'art');

//导入路由
const home = require('./route/homeRoute');
const user = require('./route/userRoute');
const admin = require('./route/adminRoute');

//用户后台登录守卫
app.use('/user', (req, res, next) => {
    if (req.session.currentUser && req.session.currentUser.userRole == 'normal') {
        next()
    } else {
        res.send("<script>alert('用户信息失效！请重新登录···');window.location.href = '/login'</script>")
    }
})

//管理员后台登录守卫
app.use('/admin', (req, res, next) => {
    // 判断用户访问的是否是登录页面
    // 判断用户的登录状态
    // 如果用户是登录的 将请求放行
    // 如果用户不是登录的 将请求重定向到登录页面
    if (req.url != '/login') {
        if (req.session.currentUser && req.session.currentUser.userRole == 'admin') {
            //用户是管理员
            // 用户是登录状态 将请求放行
            next();
        } else {
            res.redirect('/admin/login');
        }
    } else {
        next();
    }
})


//构建模块化路由
//一级路由
app.use('/', home);
app.use('/user', user);
app.use('/admin', admin);


app.listen(4000);
console.log("服务器OK,请访问：localhost:4000");